#include "smg.h"

// 数码管0~F
// 0 1 2 3 4 5 6 7 
// 8 9 A b C d E F
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
				  0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/*******************************************************************************
* 函 数 名 : smg_display
* 函数功能 : 动态数码管显示
* 输 入 : dat[]：要显示的数据 [0 ~ F]
		  pos：从左开始第几个位置开始显示，范围 1-8
* 输 出 : 无
*******************************************************************************/
void smg_display(u8 dat[], u8 pos)
{
	u8 i=0;
	u8 temp_pos=pos-1;

	for(i=temp_pos;i<8;i++)
	{
		// 位选切换
		switch(i)
		{
			case 0: LSC=1;LSB=1;LSA=1;break;
			case 1: LSC=1;LSB=1;LSA=0;break;
			case 2: LSC=1;LSB=0;LSA=1;break;
			case 3: LSC=1;LSB=0;LSA=0;break;
			case 4: LSC=0;LSB=1;LSA=1;break;
			case 5: LSC=0;LSB=1;LSA=0;break;
			case 6: LSC=0;LSB=0;LSA=1;break;
			case 7: LSC=0;LSB=0;LSA=0;break;
		}
		// 展示段选值
		SMG_A_DP_PORT=gsmg_code[dat[i - temp_pos]];
		// delay 1ms
		delay_10us(100);
		// 消影
		SMG_A_DP_PORT=0x00;
	}
}

void smg_display_by_buff(u8 dat[], u8 pos)
{
	u8 i=0;
	u8 temp_pos=pos-1;

	for(i=temp_pos;i<8;i++)
	{
		// 位选切换
		switch(i)
		{
			case 0: LSC=1;LSB=1;LSA=1;break;
			case 1: LSC=1;LSB=1;LSA=0;break;
			case 2: LSC=1;LSB=0;LSA=1;break;
			case 3: LSC=1;LSB=0;LSA=0;break;
			case 4: LSC=0;LSB=1;LSA=1;break;
			case 5: LSC=0;LSB=1;LSA=0;break;
			case 6: LSC=0;LSB=0;LSA=1;break;
			case 7: LSC=0;LSB=0;LSA=0;break;
		}
		// 展示段选值
		SMG_A_DP_PORT=dat[i-temp_pos];
		// delay 1ms
		delay_10us(100);
		// 消影
		SMG_A_DP_PORT=0x00;
	}
}
